﻿using System;
using System.Collections.Generic;
using System.Data;
using System.Data.SqlClient;
using GazelDoor.Model;

namespace GazelDoor.Controlli
{
    public class ctrlMovimentiTessere
    {
        GazelConnessione gazelConnector = GazelConnessione.Istance();

        private GazelConnessione session
        {
            get
            {
                return GazelConnessione.Istance();
            }
        }

        /* Metodo visualizza storico movimento tessere - attivate */

        public DataTable VisualizzaTessereAttive()
        {
            //List<Persona> tesserapersona = new List<Persona>();

            string query = "SELECT Persone.nome,Persone.cognome,Tessere.codice, Tessere.abilitata FROM MovimentiTessere INNER JOIN " 
                + "Tessere ON MovimentiTessere.idtessera = Tessere.id INNER JOIN " 
                + "Persone ON MovimentiTessere.idpersona = Persone.id ";
             //   +"WHERE (Tessere.abilitata= 1)";

            DataTable dataTable = new DataTable();

            SqlDataAdapter sda = new SqlDataAdapter(query, gazelConnector.Connessione);

            sda.Fill(dataTable);

            /* foreach (DataRow DR in dataTable.Rows)
            {
                Dipendente ritpersona = new Dipendente();

                /* ... 
                ritpersona.Nome = (string)DR["nome"];
                ritpersona.Cognome = (string)DR["cognome"];
                //ritpersona.Tessera = Convert.ToString(DR["Tessere.codice"]);

                tesserapersona.Add(ritpersona);
            } */

            return dataTable;
        }

        /* Metodo visualizza storico movimento tessere - disattivate */

        public List<Tessera> VisualizzaTessereDisattivate()
        {
            List<Tessera> tesserapersona = new List<Tessera>();

            string query = "SELECT Tessere.codice FROM MovimentiTessere INNER JOIN " +
                              "Tessere ON MovimentiTessere.idtessera = Tessere.id INNER JOIN " +
                              "Persone ON MovimentiTessere.idpersona = Persone.id " +
                              "WHERE (Tessere.abilitata= 0) ";

            DataTable dataTable = new DataTable();

            using (SqlCommand comandi = new SqlCommand(query, gazelConnector.Connessione))
            {
                SqlDataAdapter mda = new SqlDataAdapter(query, gazelConnector.Connessione);

                comandi.CommandText = query;
                comandi.ExecuteNonQuery();

                DataSet ds = new DataSet();

                SqlCommandBuilder builder = new SqlCommandBuilder(mda);

                mda.Fill(dataTable);
            }

            foreach (DataRow DR in dataTable.Rows)
            {
                Tessera ritpersona = new Tessera();

                ritpersona.Codice = Convert.ToString(DR["codice"]);

                tesserapersona.Add(ritpersona);
            }
            return tesserapersona;
        }

        /* Metodo visualizza storico movimento tessere - codice tessera */

        public List<Persona> VisualizzaTessereCodice(string codice)
        {
            List<Persona> tesserapersona = new List<Persona>();

            string query = "SELECT Persone.nome,Persone.cognome FROM MovimentiTessere INNER JOIN " +
                              "Tessere ON MovimentiTessere.idtessera = Tessere.id INNER JOIN " +
                              "Persone ON MovimentiTessere.idpersona = Persone.id " +
                              "WHERE Tessere.codice='" + codice + "' ";

            DataTable dataTable = new DataTable();

            using (SqlCommand comandi = new SqlCommand(query, gazelConnector.Connessione))
            {
                SqlDataAdapter mda = new SqlDataAdapter(query, gazelConnector.Connessione);

                comandi.CommandText = query;
                comandi.ExecuteNonQuery();

                DataSet ds = new DataSet();

                SqlCommandBuilder builder = new SqlCommandBuilder(mda);

                mda.Fill(dataTable);
            }

            foreach (DataRow DR in dataTable.Rows)
            {
                Dipendente ritpersona = new Dipendente();

                /* ... */
                ritpersona.Nome = (string)DR["Persone.nome"];
                ritpersona.Cognome = (string)DR["Persone.cognome"];

                tesserapersona.Add(ritpersona);
            }
            return tesserapersona;
        }

        public void InserimentoMovimento(Persona persona, Guid idattivita, Tessera tessera)
        {
            MovimentoTessera movimento = new MovimentoTessera();

            string query = "INSERT INTO MovimentiTessere VALUES(@id, @idtessera, @idpersona, @idattivita, @datamovimento)";
            SqlCommand insert = new SqlCommand(query, gazelConnector.Connessione);

            SqlParameter id = new SqlParameter();
            id.ParameterName = "@id";
            id.SqlDbType = SqlDbType.UniqueIdentifier;
            id.Value = movimento.Id;
            insert.Parameters.Add(id);

            SqlParameter idTessera = new SqlParameter();
            idTessera.ParameterName = "@idtessera";
            idTessera.SqlDbType = SqlDbType.UniqueIdentifier;
            idTessera.Value = tessera.Id;
            insert.Parameters.Add(idTessera);

            SqlParameter idPersona = new SqlParameter();
            idPersona.ParameterName = "@idpersona";
            idPersona.SqlDbType = SqlDbType.UniqueIdentifier;
            idPersona.Value = persona.Id;
            insert.Parameters.Add(idPersona);

            SqlParameter idAttività = new SqlParameter();
            idAttività.ParameterName = "@idattivita";
            idAttività.SqlDbType = SqlDbType.UniqueIdentifier;
            idAttività.Value = idattivita;
            insert.Parameters.Add(idAttività);

            SqlParameter dataMovimento = new SqlParameter();
            dataMovimento.ParameterName = "@datamovimento";
            dataMovimento.SqlDbType = SqlDbType.DateTime;
            dataMovimento.Value = movimento.DataAttivita;
            insert.Parameters.Add(dataMovimento);

            insert.ExecuteNonQuery();
        }
    }
}